<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>柯里化函数</title>
</head>
<body>

    <script>
        //普通的函数
        function user1(name,age,id)
        {
            console.log(name,age,id);
        }
        user1("cq",18,12345);

        //将函数柯里化
        function user2(name)
        {
            return function(age)
            {
                return function(id)
                {
                    console.log(name,age,id);
                }
            }
        }
        user2("cq")(18)(123);

        //柯里化函数方法：将普通的函数变为柯里化函数，使用到递归的方式，递归调用结束的条件就是传入的参数大于或者等于原函数的参数。
        function carry(fn)
        {
            return function carried(...args)
            {
                if(args.length>=fn.length)
                {
                    return fn(...args);
                }
                else 
                {
                    return function(...moreArgs)
                    {
                        return carried(...args,...moreArgs);
                    }
                }
            }
        }

        function sum (x,y)
        {
            return x+y;
        }

        //将sum转化为柯里化函数
        var sumtoCarry = carry(sum);
        var ret = sumtoCarry(10)(20);
        console.log(ret);

    </script>
    
</body>
</html>